package com.mdd.common.enums;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 订单状态枚举类
 * @author shenjian
 * @createTime 2023年02月17日 00:04:00
 */
public enum OrderStatusEnum {

    /** 已失效 */
    EXPIRED(-1, -1, "已失效"),
    /** 已下单, 待支付 */
    ORDERED(0, 0, "待支付"),
    /** 已支付 */
    PAID(1, 1, "已支付"),
    /** 出餐中 */
    DURING_MEAL(2, 1, "出餐中"),
    /** 配送中 */
    SHIPPING(3, 2, "配送中"),
    /** 已送达 */
    DELIVERED(4, 3, "已送达"),
    /** 已完成 */
    COMPLETED(5, 4, "已完成"),
    /** 申请退款 */
    APPLY_REFUNDED(6, 5, "申请退款中"),
    /** 已退款 */
    REFUNDED(7, 5, "已退款");

    private final Integer code;

    private final Integer query;

    private final String value;

    /**
     * 构造方法
     */
    OrderStatusEnum(Integer code, Integer query, String value) {
        this.code = code;
        this.query = query;
        this.value = value;
    }

    public Integer getCode() {
        return code;
    }

    public Integer getQuery() {
        return query;
    }

    public String getValue() {
        return value;
    }

    public static List<OrderStatusEnum> getStatusByQuery(Integer query) {
        return Stream.of(OrderStatusEnum.values()).filter(s -> s.getQuery().equals(query)).collect(Collectors.toList());
    }

    public static String getValueByCode(Integer code) {
        Optional<OrderStatusEnum> first = Stream.of(OrderStatusEnum.values())
                .filter(s -> s.getCode().equals(code))
                .findFirst();
        return first.map(OrderStatusEnum::getValue).orElse(null);
    }
}
